package srcTest;

import static org.junit.Assert.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.embeddable.EJBContainer;
import javax.naming.NamingException;

import junit.framework.Assert;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.sumset.daos.ComentarioDao;
import com.sumset.daos.PostDao;
import com.sumset.daos.UsuarioDao;
import com.sumset.entidades.Comentario;
import com.sumset.entidades.Post;

/**clase que prueba los metodos de la clase ComentarioDao
 * @author leyson FCP
 *
 */
public class ComentarioTest {
	
	
	private static EJBContainer contenedor;
	private static ComentarioDao cd;
	
	/**metodo que instancia los atributos de la clase y luego
	 *  crea un comentario para las pruebas de todos los metodos
	 * @throws Exception
	 */
	@BeforeClass
	public static void primerMeodo() throws Exception {
		//incializamos los atributos de la clase
		Map<String, String> properties=new HashMap<String, String>();
		properties.put(EJBContainer.APP_NAME, "pratica_26");
		contenedor=EJBContainer.createEJBContainer(properties);
		cd=(ComentarioDao) contenedor.getContext().lookup("java:global/pratica_26/ComentarioDao");
		PostDao pd=(PostDao) contenedor.getContext().lookup("java:global/pratica_26/PostDao");
		UsuarioDao ud=(UsuarioDao) contenedor.getContext().lookup("java:global/pratica_26/UsuarioDao");
		//creamos el comentario
		Comentario c=new Comentario();
		c.setId(1);
		c.setPost(pd.buscar(3));
		c.setUsuario(ud.buscar("prueba"));
		c.setComentario("tales");
		
		cd.insert(c);
	}

	/**metodo que prueba el insertar de la clase comentarioDao
	 * @throws Exception
	 */
	@Test
	public void testInsert() throws Exception {
		PostDao pd=(PostDao) contenedor.getContext().lookup("java:global/pratica_26/PostDao");
		UsuarioDao ud=(UsuarioDao) contenedor.getContext().lookup("java:global/pratica_26/UsuarioDao");
		
		Comentario c=new Comentario();
		c.setId(2);
		c.setPost(pd.buscar(3));
		c.setUsuario(ud.buscar("prueba"));
		c.setComentario("tales");
		
		cd.insert(c);
	}
	/**metodo que prueba el actualizar de la clase comentarioDao
	 * @throws Exception
	 */
	@Test
	public void testUpdate() throws Exception {
		Comentario c=cd.buscar(1);
		c.setComentario("retales");
		cd.update(c);
		c=cd.buscar(1);
		Assert.assertEquals("retales", c.getComentario());
		
	}
	/**metodo que prueba el eliminar de la clase comentarioDao
	 * @throws Exception
	 */
	@Test
	public void testDelete() throws Exception {
		Comentario c=cd.buscar(2);
		cd.delete(c);
		c=cd.buscar(2);
		Assert.assertEquals(null, c);
	}
	/**metodo que prueba el buscar de la clase comentarioDao
	 * @throws Exception
	 */
	@Test
	public void testBuscar() throws Exception {
		Comentario c=cd.buscar(1);
		Assert.assertEquals(1, c.getId().intValue());
	}
	/**metodo que prueba el listar de la clase comentarioDao
	 * @throws Exception
	 */
	@Test
	public void testListar() throws Exception {
		Comentario c=cd.buscar(1);
		List<Comentario> cs=cd.listar();
		Assert.assertTrue(cs.contains(c));
	}
	/**
	 * metoso que elimina el comentario creado al principio para
	 * no dejar rastros de la prueba
	 * @throws Exception
	 */
	@AfterClass
	public static void ultimoMetodo() throws Exception {
		Comentario c=cd.buscar(1);
		cd.delete(c);
	}

}
